#ifndef CLASS_MANAGER_GRAPHICS_HPP_
# define CLASS_MANAGER_GRAPHICS_HPP_

# include <SFML/Graphics.hpp>

# include "Abstract/Manager/AManager.hpp"

# include "Class/Entity/Camera.hpp"

namespace	Manager
{
  class		Graphics: public AManager
  {
  public:
# ifdef MANAGER_GRAPHICS_INCLUDE_CONFIGURATION_
#  undef MANAGER_GRAPHICS_INCLUDE_CONFIGURATION_
# endif

# define MANAGER_GRAPHICS_INCLUDE_CONFIGURATION_
# include "Class/Manager/Graphics/Configuration.hpp"

# undef MANAGER_GRAPHICS_INCLUDE_CONFIGURATION_


  public:
    Graphics();
    Graphics(Configuration const &);

  private:
	Graphics(Graphics const &) : AManager(false), _Window(NULL), _Config(), _Color(0, 0, 0) {}

	Graphics const		&operator=(Graphics const &) { return (*this); }


  public:
    bool				Open();
	bool				ReOpen();
    bool				Close();

	void				Clear();
	void				Display();

	void				Draw(sf::Sprite &);
	void				Draw(sf::Sprite *);

	bool				GetEvent(sf::Event &) throw();
	float				GetFrameTime() const throw();
	void				SetBackgroundColor(char unsigned, char unsigned, char unsigned);
	bool				SetConfiguration(Configuration const &);
	bool				SetDefaultConfiguration();

	void				SetDefaultGUICamera();
	void				SetDefault2DCamera();
	void				SetDefault3DCamera();
	void				SetCamera(Entity::Camera2D const &);
	void				SetCamera(Entity::Camera3D const &);

	bool				IsOpened() const throw();

    ~Graphics() throw();


  private:
	sf::RenderWindow	*_Window;
	Configuration		_Config;

	sf::Color			_Color;
  };
}

#endif
